Skip to content

[scielo-tools-17] App standalone spsvalidator#15

Closed
gitnnolabs wants to merge 1 commit into
mainfrom
chore/scielo-tools-7
Closed

[scielo-tools-17] App standalone spsvalidator#15
gitnnolabs wants to merge 1 commit into
mainfrom
chore/scielo-tools-7

Conversation

@gitnnolabs

@gitnnolabs gitnnolabs commented Jun 25, 2026

Copy link
Copy Markdown
Collaborator

O que esse PR faz?

Adiciona o app standalone apps/spsvalidator: uma aplicação auto-suficiente para validação de pacotes SPS (.zip), independente do projeto Django/Wagtail principal e sem Celery. Características:

  • Stack: Flask + Pywebview + SQLite + packtools (pyproject.toml próprio, layout src/).
  • Dois modos de execução: desktop (janela Pywebview) e navegador (spsvalidator --browser, em http://127.0.0.1:5000).
  • Upload de pacote .zip, validação via packtools, export CSV dos resultados e persistência local do histórico em SQLite (~/.spsvalidator/spsvalidator.sqlite3).
  • Internacionalização (web/i18n.py) e API desktop (desktop_api.py).
  • Scripts de empacotamento por SO em packaging/ (macOS/Linux/Windows) + spsvalidator.spec (PyInstaller).

Onde a revisão poderia começar?

  • apps/spsvalidator/src/spsvalidator/domain/validation.py (núcleo da validação do pacote)
  • apps/spsvalidator/src/spsvalidator/services/validation_service.py (orquestração + persistência)
  • apps/spsvalidator/src/spsvalidator/web/routes.py e app.py (camada web/Flask)
  • apps/spsvalidator/src/spsvalidator/main.py (entrypoint desktop/navegador)
  • apps/spsvalidator/pyproject.toml (dependências e script spsvalidator)

Como este poderia ser testado manualmente?

  1. cd apps/spsvalidator
  2. python -m venv .venv && source .venv/bin/activate
  3. pip install -e ".[dev]"
  4. Testes: python -m pytest -q
  5. Modo navegador: spsvalidator --browser e abrir http://127.0.0.1:5000
  6. Enviar um pacote .zip SPS pela interface e conferir o resultado da validação e o export CSV.

Algum cenário de contexto que queira dar?

O spsvalidator é entregue como app isolado/auto-suficiente (não roda como task e não acopla ao Django principal), complementando a validação integrada ao Wagtail (xml_manager) para o cenário desktop/offline.

Pontos de atenção para a revisão (ajustar antes do merge, se aplicável):

  • O stage inclui apps/spsvalidator/src/spsvalidator.egg-info/ — artefato de build que normalmente não deve ser versionado (sugerido git rm -r --cached e adicionar *.egg-info/ ao .gitignore).
  • Os testes test_metadata.py, test_service_and_web.py e test_validation_integration.py dependem de uma fixture XML; confirmar que apps/spsvalidator/tests/fixtures/dias_2023.xml está incluída no PR para que os testes rodem de forma isolada.

Screenshots

N/A

Quais são tickets relevantes?

scieloorg/spsvalidator#5

Referências

  • packtools 4.12.6 (scieloorg/packtools)
  • Origem do app: scielo-tools-initial/apps/spsvalidator

…ação de pacote SPS

App auto-suficiente em apps/spsvalidator (Flask + Pywebview + SQLite +
packtools)
para validação de pacotes SPS (.zip), isolado do projeto Django
principal e sem
depender de Celery. Inclui modo desktop (Pywebview) e modo navegador
(Flask),
export CSV dos resultados, persistência local em SQLite e scripts de
empacotamento
por sistema operacional (macOS, Linux, Windows).
@gitnnolabs gitnnolabs self-assigned this Jun 25, 2026
@gitnnolabs gitnnolabs added the enhancement New feature or request label Jun 25, 2026
@robertatakenaka robertatakenaka requested review from samuelveigarangel and removed request for Rossi-Luciano June 25, 2026 17:47
from packtools.sps.pid_provider.xml_sps_lib import XMLWithPre
from packtools.sps.validation.xml_validator import get_validation_results

if not os.path.isfile(zip_path):

def _sha256_of_file(path: str) -> str:
digest = hashlib.sha256()
with open(path, "rb") as file_pointer:
raise ValueError(zip_only_message or "Only SPS .zip files are supported.")
with tempfile.TemporaryDirectory(prefix="spsvalidator-") as temp_dir:
zip_path = os.path.join(temp_dir, Path(filename).name)
uploaded_file.save(zip_path)
filename = "package.zip"

def save(self, destination):
Path(destination).write_bytes(b"zip")
filename = "package.zip"

def save(self, destination):
Path(destination).write_bytes(payload.getvalue())
def _redirect_with_lang(endpoint: str, **values):
response = make_response(redirect(url_for(endpoint, **values)))
language = normalize_language(request.cookies.get("lang"))
response.set_cookie("lang", language, max_age=60 * 60 * 24 * 365)
def set_language(language_code: str):
language = normalize_language(language_code)
redirect_target = request.args.get("next") or url_for("web.index")
response = make_response(redirect(redirect_target))
@gitnnolabs gitnnolabs changed the title [scielo-tools-7] App standalone spsvalidator [scielo-tools-17] App standalone spsvalidator Jun 26, 2026
@robertatakenaka

Copy link
Copy Markdown
Member

branch migrado para um repositório: spsvalidator

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants